The UNION operator is used to combine the result set of two or more SELECT statements.
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2
The UNION operator selects only distinct values by default. To allow duplicate values, use UNION ALL:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2
In this tutorial we will use the famous example database "Northwind".
Below is a sample from the table "Customers" ("Customers"):
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
And the sample from the table "Suppliers" ("Suppliers"):
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country | Phone |
---|---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK | (171) 555-2222 |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA | (100) 555-4822 |
3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA | (313) 555-5735 |
4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai Musashino-shi | Tokyo | 100 | Japan | (03) 3555-5011 |
5 | Cooperativa de Quesos 'Las Cabras' | Antonio del Valle Saavedra | Calle del Rosal 4 | Oviedo | 33007 | Spain | (98) 598 76 54 |
The following SQL statement selects cities (different values only) from the Customers and Suppliers tables:
Run SQLSELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City
The following SQL statement selects cities (also duplicate values) from both the Customers and Suppliers tables:
Run SQLSELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City
The following SQL statement selects German cities (different values only) from both the Customers and Suppliers tables:
Run SQLSELECT City, Country FROM Customers
WHERE Country = 'Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country = 'Germany'
ORDER BY City
The following SQL statement selects German cities (also duplicate values) from both the Customers and Suppliers tables:
Run SQLSELECT City, Country FROM Customers
WHERE Country = 'Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country = 'Germany'
ORDER BY City
The following SQL statement lists all customers and suppliers:
Run SQLSELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers
Note the "AS Type" above is an alias. SQL aliases are used to give a table or column a temporary name. The alias exists only for the duration of the request. So, here we have created a temporary column called "Type" that indicates whether the contact is a "Customer" or a "Vendor".